// 异步api产生的回调地狱问题

const fs = require("fs");




// 目的：实现1、2、3三个文件的依次读取和输出(但是产生了回调地狱问题)
// fs.readFile("./1.txt","utf8",(err,result1) =>{
// 	console.log(result1)
// 	fs.readFile("./2.txt","utf8",(err,result2) =>{
// 		console.log(result2)
// 		fs.readFile("./3.txt","utf8",(err,result3) =>{
// 			console.log(result3)
// 		})
// 	})
// })







// 解决方法一：通过promise构造函数创建promise对象实现异步api执行和结果输出的分离


// 2、创建函数裹包promise对象，让他的返回值是promise对象，实现依次读取并输出的功能
// function p1(){
// // 1、创建promise函数裹包异步API
// return new Promise((resolve,reject)=>{
// 	fs.readFile("./1.txt","utf8",(err,result)=>{
// 		if (err!=null) {
// 			reject(err);
// 		}else {
// 			resolve(result);
// 	}
	
// })
// })
// promise.then((result) =>{
// 	console.log(result);
// }).catch((err)=>{
// console.log(err);
// })

// }


// function p2(){
// // 1、创建promise函数裹包异步API
// return new Promise((resolve,reject)=>{
// 	fs.readFile("./2.txt","utf8",(err,result)=>{
// 		if (err!=null) {
// 			reject(err);
// 		}else {
// 			resolve(result);
// 	}
	
// })
// })
// promise.then((result) =>{
// 	console.log(result);
// }).catch((err)=>{
// console.log(err);
// })

// }

// function p3(){
// // 1、创建promise函数裹包异步API
// return new Promise((resolve,reject)=>{
// 	fs.readFile("./3.txt","utf8",(err,result)=>{
// 		if (err!=null) {
// 			reject(err);
// 		}else {
// 			resolve(result);
// 	}
	
// })
// })
// promise.then((result) =>{
// 	console.log(result);
// }).catch((err)=>{
// console.log(err);
// })

// }

// p1().then((r1)=>{
// 	console.log(r1);
// 	return p2();

// }).then((r2)=>{
// 	console.log(r2);
// 	return p3();

// }).then((r3)=>{
// 	console.log(r3);
// 	return p2();

// })




// 解决方法二：异步函数async方式:
// 1、用系统模块util中promisify方法将异步api改造成promise对象；
// 2、await关键字后后面只能写promise对象，将异步输出方式转变成同步结果输出方式

let promisify =require("util").promisify;
readFile=promisify(fs.readFile);

async function run (){
	let r1 = await readFile("./1.txt","utf8");
	let r2 = await readFile("./2.txt","utf8");
	let r3 = await readFile("./3.txt","utf8");
	console.log(r1);
	console.log(r2);
	console.log(r3);

}

run();




